
#include "touch.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/input.h>

//获取手指触摸屏幕的坐标
int get_touch( int * x, int * y )
{
    //1.打开触摸屏 
    int fd = open( "/dev/input/event6", O_RDWR );
    if( fd == -1 )
    {
        perror("open event6 error ");
        return -1;
    }

    //2.读取输入事件信息
    int x0 = -1;
    int y0 = -1;
    struct input_event ev;      //保存事件的信息 
    while( 1 )
    {
        read( fd, &ev, sizeof(ev) );

        //3.解析坐标
        if( ev.type == EV_ABS ) //触摸事件 
        {
            if( ev.code == ABS_X )  //x轴 
            {
                x0 = ev.value;
            }
            else if( ev.code == ABS_Y )     //y轴 
            {
                y0 = ev.value;
            }
            else if( ev.code == ABS_PRESSURE && ev.value == 0 )      //触摸屏的压力 
            {   
                //退出的条件，压力事件的压力值为0 
                if( x0 != -1 && y0 != -1 )
                {
                    break;
                }
            }
        }
        else if( ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0 )
        {
            //按键事件，且把整个屏幕当作是一个按键来使用,且此时按键是松开
            if( x0 != -1 && y0 != -1 )
            {
                break;
            }
        }
        
    }

    *x = x0;
    *y = y0;

    printf("( %d , %d ) \n", x0, y0 );

    //关闭触摸屏 
    close( fd );
}

/*
获取手指滑动的方向
    上 1
    下 2 
    左 3
    右 4
*/
int get_direction()
{
    //1.打开触摸屏 
    int fd = open( "/dev/input/event6", O_RDWR );
    if( fd == -1 )
    {
        perror("open event6 error ");
        return -1;
    }

    int x0 = -1, y0 = -1;       //起点
    int x1 = -1, y1 = -1;       //终点

    struct input_event ev;      //保存事件的信息 
    while( 1 )
    {
        //2.读取输入事件信息
        read( fd, &ev, sizeof(ev) );

        //3.解析坐标
        if( ev.type == EV_ABS ) //触摸事件 
        {
            if( ev.code == ABS_X )  //x轴 
            {
                if( x0 == -1 )      //把x0自身作为标志位，来区分起点坐标和终点坐标
                {
                    x0 = ev.value;
                }
                x1 = ev.value;
            }
            else if( ev.code == ABS_Y )     //y轴 
            {
                if( y0 == -1 )
                {
                    y0 = ev.value;
                }
                y1 = ev.value;
            }
            else if( ev.code == ABS_PRESSURE && ev.value == 0 )      //触摸屏的压力 
            {   
                //退出的条件，压力事件的压力值为0 
                if( x0 != -1 && y0 != -1 )
                {
                    break;
                }
            }
        }
        else if( ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0 )
        {
            //按键事件，且把整个屏幕当作是一个按键来使用,且此时按键是松开
            if( x0 != -1 && y0 != -1 )
            {
                break;
            }
        }
    }

    printf("( %d , %d ) ---> ( %d , %d )\n", x0, y0, x1, y1 );

    //关闭触摸屏 
    close( fd );

    //5.判断滑动方向 
    int xx = abs( x0 - x1 );
    int yy = abs( y0 - y1 );

    if( xx > yy )   //水平
    {
        if( x0 > x1 )
        {
            return LEFT;        //左滑
        }
        else 
        {
            return RIGHT;       //右滑
        }
    }
    else        //垂直 
    {
        if( y0 > y1 )
        {
            return UP;      //上滑
        }
        else
        {
            return DOWN;    //下滑
        }
    }
}

